﻿Option Explicit On

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Drawing
Imports System.Web.UI.DataVisualization.Charting
Imports System.Net.Mail
Imports System.Threading
Imports System.Globalization


Public Module FG ' Funciones  Generales
    Enum TipoGraficoTortaGoogle
        DosDimensiones = 1

        TRes_D = 2

    End Enum
    Enum TipoGraficoBarrasGoogle
        horizonal = 1

        veritical = 2

    End Enum


    Enum TipoGrafico
        Torta = 1
        Barra = 2
        Area = 3
    End Enum
    Public Sub culturaPaginas()
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("es-AR")
        Thread.CurrentThread.CurrentUICulture = New CultureInfo("es-AR")
    End Sub

    Public Function MsgBox(ByVal Prompt As Object, Optional ByVal Buttons As Microsoft.VisualBasic.MsgBoxStyle = MsgBoxStyle.OkOnly, Optional ByVal Title As Object = Nothing) As Microsoft.VisualBasic.MsgBoxResult
        'ConstanteValor
        'OK1
        'Cancel2
        'Abort3
        'Retry4
        'Ignore5
        'Yes6
        'No7

        MsgBox = 6

    End Function


    Public Sub cargaChart(ByRef chart1 As Chart, ByVal titleChart As String, ByVal grafico As TipoGrafico, ByVal rs As ADODB.Recordset, Optional ByVal MAx_del_Eje As Integer = 0)
        Dim ChartArea1 As DataVisualization.Charting.ChartArea = New ChartArea()
        Dim I As Integer
        Dim dt As New DataTable
        Dim nOrientation As Integer

        'vacio el chart
        chart1.DataBind()


        If rs.RecordCount = 0 Then
            Exit Sub
        End If


        dt = FG.cargaUnDataTable(rs)

        'ChartArea1.Name = "ChartArea1"
        ChartArea1.Name = ""
        'Seteo Titulo Encabezado Chart 

        chart1.Titles.Add(titleChart)
        chart1.Titles(0).Text = titleChart
        'aca  le pongo el stylo de la letra del titulo 
        chart1.Titles(0).Font = New Font("Times New Roman", 12)

        chart1.Titles(0).TextStyle = DataVisualization.Charting.TextStyle.Shadow
        chart1.Titles(0).TextOrientation = DataVisualization.Charting.TextOrientation.Horizontal
        chart1.Titles(0).Docking = DataVisualization.Charting.Docking.Top
        chart1.Titles(0).Alignment = Drawing.ContentAlignment.MiddleCenter
        chart1.ChartAreas.Add(ChartArea1)
        chart1.Width = 600
        chart1.Height = 600
        chart1.ChartAreas(0).AxisX.Interval = 1

        With chart1.ChartAreas(0).Area3DStyle
            .Enable3D = True
            .Inclination = 40
        End With

        'Cargo los datos con el DataTable al Chart1
        chart1.DataSource = dt

        'Creo la Serie1
        chart1.Series.Add(getSeries("Series1"))

        'Implemento Series
        chart1.Series(0).Points.Clear()

        chart1.Series(0).XValueMember = dt.Columns(0).ColumnName
        chart1.Series(0).YValueMembers = dt.Columns(1).ColumnName


        'le digo que tipo va hacer 
        chart1.Series(0).YValueType = ChartValueType.Double

        'le pongo el maxim
        If MAx_del_Eje <> 0 Then
            If chart1.ChartAreas(0).AxisY.Maximum > MAx_del_Eje Then
                chart1.ChartAreas(0).AxisY.Maximum = MAx_del_Eje
            End If
        End If
        '--------------------------------------



        'Se elige el grafico a mostrar segun lo que se selecciona en el Combo
        Dim nSeriesChartType As Integer
        Select Case (grafico)

            Case 1 '"Gráfico de torta"
                nSeriesChartType = DataVisualization.Charting.SeriesChartType.Pie
                nOrientation = AreaAlignmentOrientations.Vertical
            Case 2 '"Gráfico de barras"
                nSeriesChartType = DataVisualization.Charting.SeriesChartType.Bar
                nOrientation = AreaAlignmentOrientations.Vertical
            Case 3 '"Gráfico de área"
                nSeriesChartType = DataVisualization.Charting.SeriesChartType.Area
                nOrientation = AreaAlignmentOrientations.Horizontal
        End Select

        chart1.ChartAreas(0).AlignmentOrientation = nOrientation
        chart1.DataBind()

        For I = 0 To chart1.Series.Count - 1
            chart1.Series(I).ChartType = nSeriesChartType
            chart1.Series(I)("PieLabelStyle") = "outside"
        Next I

    End Sub

    Public Function getSeries(ByVal nameSerie As String) As Series
        Dim Series1 As Series = New Series
        Series1.ChartArea = "ChartArea1"
        Series1.Legend = "Legend1"
        Series1.Name = nameSerie
        Series1.ChartType = SeriesChartType.Line
        Series1.BorderWidth = 3
        getSeries = Series1

    End Function

    Public Function CargaCombo_x_2_valores(ByRef NombredelStore As String, ByVal NombreCombo As DropDownList, ByVal valor1 As String, ByVal valor2 As String) As Integer

        Dim Rs As ADODB.Recordset
        Dim param(1) As ADODB.Parameter
        Dim I As Integer

        'vacio el combo'''''
        NombreCombo.Items.Clear()
        ''''''''''''''''''




        param(0) = New ADODB.Parameter
        param(0).Name = "@valor1"
        param(0).Type = ADODB.DataTypeEnum.adVarChar
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(0).Value = valor1
        param(0).Size = 255



        param(1) = New ADODB.Parameter
        param(1).Name = "@valor2"
        param(1).Type = ADODB.DataTypeEnum.adVarChar
        param(1).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(1).Value = valor2
        param(1).Size = 255

        Rs = Datos.TraerTodos(NombredelStore, param, "funcion que carga combos x dos valores")



        'cargo el combo'''
        If Rs.RecordCount > 0 Then
            Rs.MoveFirst()
            For I = 1 To Rs.RecordCount
                NombreCombo.Items.Add(Rs.Fields(0).Value.ToString)
                Rs.MoveNext()
            Next I

        End If
        ''''''''''''''''

        'devuelvo la cantidad de items q se cargaron
        CargaCombo_x_2_valores = I




    End Function

    Public Function CargaCombo_x_4_valores(ByRef NombredelStore As String, ByVal NombreCombo As DropDownList, ByVal valor1 As String, _
                                           ByVal valor2 As String, ByVal valor3 As String, ByVal valor4 As String) As Integer
        Dim j As Integer = 4
        Dim Rs As ADODB.Recordset
        Dim param(j - 1) As ADODB.Parameter
        Dim I As Integer

        'vacio el combo'''''
        NombreCombo.Items.Clear()
        ''''''''''''''''''




        param(0) = New ADODB.Parameter
        param(0).Name = "@valor1"
        param(0).Type = ADODB.DataTypeEnum.adVarChar
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(0).Value = valor1
        param(0).Size = 255

        param(1) = New ADODB.Parameter
        param(1).Name = "@valor2"
        param(1).Type = ADODB.DataTypeEnum.adVarChar
        param(1).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(1).Value = valor2
        param(1).Size = 255

        param(2) = New ADODB.Parameter
        param(2).Name = "@valor3"
        param(2).Type = ADODB.DataTypeEnum.adVarChar
        param(2).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(2).Value = valor3
        param(2).Size = 255

        param(2) = New ADODB.Parameter
        param(2).Name = "@valor4"
        param(2).Type = ADODB.DataTypeEnum.adVarChar
        param(2).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(2).Value = valor4
        param(2).Size = 255
        Rs = Datos.TraerTodos(NombredelStore, param, "funcion que carga combos x dos valores")


        'cargo el combo'''
        If Rs.RecordCount > 0 Then
            Rs.MoveFirst()
            For I = 1 To Rs.RecordCount
                NombreCombo.Items.Add(Rs.Fields(0).Value.ToString)
                Rs.MoveNext()
            Next I

        End If
        ''''''''''''''''

        'devuelvo la cantidad de items q se cargaron
        CargaCombo_x_4_valores = I




    End Function

    Public Function CargaCombo(ByRef NombredelStore As String, ByVal NombreCombo As DropDownList, Optional ByVal Parametro As String = "") As Integer
        Dim Rs As ADODB.Recordset
        Dim param(0) As ADODB.Parameter
        Dim I As Integer

        'vacio el combo'''''
        NombreCombo.Items.Clear()
        ''''''''''''''''''




        If Parametro = "" Then
            Rs = Datos.TraerTodos(NombredelStore, Nothing, "funcion que carga combos")

        Else

            param(0) = New ADODB.Parameter
            param(0).Name = "@parametro1"
            param(0).Type = ADODB.DataTypeEnum.adVarChar
            param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput
            param(0).Value = Parametro
            param(0).Size = 255

            Rs = Datos.TraerTodos(NombredelStore, param, "funcion que carga combos")

        End If

        Try

            'cargo el combo'''
            If Rs.RecordCount > 0 Then
                Rs.MoveFirst()
                For I = 1 To Rs.RecordCount
                    NombreCombo.Items.Add(Rs.Fields(0).Value.ToString)
                    Rs.MoveNext()
                Next I

            End If
            ''''''''''''''''

        Catch ex As Exception
            CargaCombo = 0
        End Try

        'devuelvo la cantidad de items q se cargaron
        CargaCombo = I

    End Function
    Public Function CargaComboxRS(ByRef Rs As ADODB.Recordset, ByVal NombreCombo As DropDownList, Optional ByVal Parametro As String = "") As Integer

        Dim I As Integer

        'vacio el combo'''''
        NombreCombo.Items.Clear()
        ''''''''''''''''''
        Try
            NombreCombo.DataSource = FG.cargaUnDataTable(Rs)
            NombreCombo.DataValueField = Rs.Fields(1).Name 'id
            NombreCombo.DataTextField = Rs.Fields(0).Name 'campo a mostrar
            NombreCombo.DataBind()
            I = 1
        Catch ex As Exception
            CargaComboxRS = 0
        End Try

        CargaComboxRS = I

    End Function

    Public Function GeneraClve_alatoria() As String
        Randomize()

        GeneraClve_alatoria = Right("1200" + CStr(CInt(Rnd() * 5)), 6)

    End Function


    Public Function ValNombres(ByVal valor As String, Optional ByVal Nombredecampo As String = "", Optional ByVal ValidaVACIO As Boolean = False) As Boolean
        Dim I As Integer
        Dim Caracter As String


        If ValidaVACIO = True Then
            If valor = "" Then
                ValNombres = False
                If Nombredecampo <> "" Then
                    MsgBox("El campo " & Nombredecampo & " no puede quedar vacio", MsgBoxStyle.Exclamation, "Información")
                End If
                Exit Function
            End If
        End If

        For I = 1 To Len(valor)

            Caracter = Mid(valor, I, 1)

            If IsNumeric(Caracter) = True Then
                ValNombres = False
                If Nombredecampo <> "" Then
                    MsgBox("El campo " & Nombredecampo & " Contiene caracteres no validos", MsgBoxStyle.Exclamation, "Informacion")
                End If
                Exit Function
            End If

        Next I


        ValNombres = True




    End Function


    Public Function ValCampoNumericos(ByVal valor As String, Optional ByVal Nombredecampo As String = "") As Boolean
        Dim I As Integer
        Dim c As String

        If valor = "" Then
            ValCampoNumericos = False
            If Nombredecampo <> "" Then
                MsgBox("El campo " & Nombredecampo & " no puede quedar vacio", MsgBoxStyle.Information, "Informacion")
            End If
            Exit Function
        End If



        For I = 1 To Len(valor)

            c = Mid(valor, I, 1)

            'valido q el caracter sea numerico
            If IsNumeric(c) = False Then
                ValCampoNumericos = False

                'si trajo el nombre dl campo muestro el mesje 
                If Nombredecampo <> "" Then
                    MsgBox("El campo " & Nombredecampo & " solo admite caracteres numericos", MsgBoxStyle.Information, "Información")
                End If

                ' salgo
                Exit Function

            End If
        Next I


        ValCampoNumericos = True


    End Function
    Public Function ValCampoNumericosCONcoma(ByVal valor As String, Optional ByVal Nombredecampo As String = "") As Boolean
        Dim I As Integer
        Dim c As String
        Dim cant_de_comas As Single


        If valor = "" Then
            ValCampoNumericosCONcoma = False
            If Nombredecampo <> "" Then
                MsgBox("El campo " & Nombredecampo & " no puede quedar vacio", MsgBoxStyle.Information, "Informacion")
            End If
            Exit Function
        End If





        For I = 1 To Len(valor)
            'cazo el primer numero
            c = Mid(valor, I, 1)

            'cuento la cantidad de comas 
            If c = "." Then
                cant_de_comas = cant_de_comas + 1

                If cant_de_comas = 2 Then
                    ValCampoNumericosCONcoma = False
                    If Nombredecampo <> "" Then
                        MsgBox("El campo " & Nombredecampo & " tiene un formato invalido", MsgBoxStyle.Information, "Informacion")
                    End If
                    Exit Function
                End If

                GoTo saltaVerificacionNUmerica
            End If
            '--------------------------


            'valido q el caracter sea numerico
            If IsNumeric(c) = False Then
                ValCampoNumericosCONcoma = False

                'si trajo el nombre dl campo muestro el mesje 
                If Nombredecampo <> "" Then
                    MsgBox("El campo " & Nombredecampo & " solo admite caracteres numericos", MsgBoxStyle.Information, "Información")
                End If

                ' salgo
                Exit Function

            End If

saltaVerificacionNUmerica:

        Next I


        ValCampoNumericosCONcoma = True


    End Function

    Public Function PrimeraMayuscula(ByVal Cadena As String) As String

        If Len(Cadena) = 0 Then
            PrimeraMayuscula = ""
            Exit Function
        End If

        If Len(Cadena) = 1 Then
            PrimeraMayuscula = UCase(Mid(Cadena, 1, 1))
            Exit Function

        End If

        If Len(Cadena) > 1 Then
            PrimeraMayuscula = UCase(Mid(Cadena, 1, 1)) & LCase(Mid(Cadena, 2, Len(Cadena)))
        Else
            PrimeraMayuscula = UCase(Mid(Cadena, 1, 1)) & LCase(Mid(Cadena, 2, Len(Cadena)))
        End If

    End Function


    Public Function cargaUnDataTable(ByVal rs As ADODB.Recordset) As DataTable
        Dim row As DataRow
        Dim i As Integer
        Dim x As Integer
        Dim dt As New DataTable

        Try
            If rs.RecordCount > 0 Then

                ''''''''''''''''''''''''''''''''''''''
                'agrego las columas''
                rs.MoveFirst()
                For i = 1 To rs.Fields.Count
                    dt.Columns.Add(rs.Fields(i - 1).Name)
                Next
                '-----------------------

                For i = 1 To rs.RecordCount
                    row = dt.NewRow()
                    For x = 1 To dt.Columns.Count
                        row.Item(x - 1) = rs.Fields(x - 1).Value
                    Next
                    dt.Rows.Add(row)
                    rs.MoveNext()
                Next i
            End If

            Return dt
        Catch ex As Exception
            Return dt
        End Try

    End Function
    Public Function redirectDefaultPage() As String
        '   Paciente Web        01
        '   Administrativo      03
        '   Tecnico             04
        '   Aux_Enfermero       05
        '   Enfermero Prof.	    06
        '   Medico              07
        '   Minsterior inferior	08
        '   Ministerio Superior	09
        '   AdminSystem         10
        Dim opciones As Integer
        Dim cRedirect As String
        opciones = PersLOgueada.Dev_NivelDepefi(PersLOgueada.dev_perfilUsuario)

        Select Case opciones
            Case 1 'Paciente Web
                cRedirect = "DefaultPacienteWeb.aspx"
            Case 2 'Personal Administrativo
                cRedirect = "InicioInstitucion.aspx"
            Case 3 'Personal Administrativo
                cRedirect = "InicioInstitucion.aspx"
            Case 4 'Personal tecnico
                cRedirect = "InicioInstitucion.aspx"
            Case 5 'Auxiliar Enfermero
                cRedirect = "InicioInstitucion.aspx"
            Case 6 'Enfermero profesional
                cRedirect = "InicioInstitucion.aspx"
            Case 7 'Medico
                cRedirect = "InicioInstitucion.aspx"
            Case 8 'Ministerio inferior
                cRedirect = "InicioMinisterio.aspx"
            Case 9 'Ministerio Superior
                cRedirect = "InicioMinisterio.aspx"
            Case Else 'Adminsystems
                cRedirect = "DefaultPacienteWeb.aspx"
        End Select
        redirectDefaultPage = cRedirect

    End Function
    Public Function validaCuit(ByVal mk_p_nro As String) As Boolean
        Dim mk_suma As Integer
        Dim mk_valido As String

        mk_p_nro = mk_p_nro.Replace("-", "")
        If IsNumeric(mk_p_nro) Then
            If mk_p_nro.Length <> 11 Then
                mk_valido = False
            Else
                mk_suma = 0
                mk_suma += CInt(mk_p_nro.Substring(0, 1)) * 5
                mk_suma += CInt(mk_p_nro.Substring(1, 1)) * 4
                mk_suma += CInt(mk_p_nro.Substring(2, 1)) * 3
                mk_suma += CInt(mk_p_nro.Substring(3, 1)) * 2
                mk_suma += CInt(mk_p_nro.Substring(4, 1)) * 7
                mk_suma += CInt(mk_p_nro.Substring(5, 1)) * 6
                mk_suma += CInt(mk_p_nro.Substring(6, 1)) * 5
                mk_suma += CInt(mk_p_nro.Substring(7, 1)) * 4
                mk_suma += CInt(mk_p_nro.Substring(8, 1)) * 3
                mk_suma += CInt(mk_p_nro.Substring(9, 1)) * 2
                mk_suma += CInt(mk_p_nro.Substring(10, 1)) * 1
            End If

            If Math.Round(mk_suma / 11, 0) = (mk_suma / 11) Then
                mk_valido = True
            Else
                mk_valido = False
            End If
        Else
            mk_valido = False
        End If
        Return (mk_valido)
    End Function

    Public Function BuscaSiHayNumerosEncadena(ByVal Cadena As String) As Boolean
        'funcion que solo informa si hay numeros en una cadena
        Dim I As Integer
        Dim Caracter As String



        If Cadena = "" Then
            BuscaSiHayNumerosEncadena = False
            Exit Function
        End If

        For I = 1 To Len(Cadena)
            'desarmo la cadena en caracteres
            Caracter = Mid(Cadena, I, 1)

            'm fijo si el caracter es algun numero '
            If InStr("0123456789", Caracter, Microsoft.VisualBasic.CompareMethod.Text) > 0 Then
                BuscaSiHayNumerosEncadena = True
                Exit Function
            End If

        Next I



        ''si llego hasta aca es que no hay numeros
        BuscaSiHayNumerosEncadena = False

    End Function

    Public Function Autenticar(ByVal usuario As String, ByVal password As String) As Boolean

        PersLOgueada.SetaDatosXUsuarioYContrasenia(usuario, password)

        Autenticar = PersLOgueada.Dev_ExistePersona

    End Function

    Public Sub cargarMenuAdmin(ByRef mnuPrincipal As Menu, ByVal usuario As String)
        'Traemos los datos de datos.
        Dim param(0) As ADODB.Parameter
        Dim rs As ADODB.Recordset
        Dim dtMenuItems As New DataTable
        'Dim i As Integer

        param(0) = New ADODB.Parameter
        param(0).Name = "@usuario"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(0).Type = ADODB.DataTypeEnum.adVarChar '<--tipo de dato 
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(0).Value = usuario   ' <--el valor que le pasamos a la base
        param(0).Size = 20 'Si el dat

        rs = Datos.TraerTodos("traerMenuOpciones", param, "cargarMenuOpciones")

        dtMenuItems = FG.cargaUnDataTable(rs)

        'recorremos el datatable para agregar los elementos de que estaran en la cabecera del menú.
        For Each drMenuItem As Data.DataRow In dtMenuItems.Rows

            'esta condicion indica q son elementos padre.
            If drMenuItem("MenuId").Equals(drMenuItem("PadreId")) Then
                Dim mnuMenuItem As New MenuItem
                mnuMenuItem.Value = drMenuItem("MenuId").ToString
                mnuMenuItem.Text = drMenuItem("descripcion").ToString
                mnuMenuItem.NavigateUrl = drMenuItem("Url").ToString

                'agregamos el Ítem al menú
                mnuPrincipal.Items.Add(mnuMenuItem)

                'hacemos un llamado al metodo recursivo encargado de generar el árbol del menú.
                AddMenuItem(mnuMenuItem, dtMenuItems)
            End If
        Next

    End Sub
    Public Sub cargarMenuxUsuario(ByRef mnuPrincipal As Menu, ByVal usuario As String)
        'Traemos los datos de datos.
        Dim param(0) As ADODB.Parameter
        Dim rs As ADODB.Recordset
        Dim dtMenuItems As New DataTable
        'Dim i As Integer

        mnuPrincipal.Items.Clear()

        param(0) = New ADODB.Parameter
        param(0).Name = "@perfilusuario"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(0).Type = ADODB.DataTypeEnum.adVarChar '<--tipo de dato 
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(0).Value = usuario   ' <--el valor que le pasamos a la base
        param(0).Size = 20 'Si el dat

        rs = Datos.TraerTodos("traerMenuOpcionesxUsuario", param, "cargarMenuOpciones")

        dtMenuItems = FG.cargaUnDataTable(rs)

        'recorremos el datatable para agregar los elementos de que estaran en la cabecera del menú.
        For Each drMenuItem As Data.DataRow In dtMenuItems.Rows

            'esta condicion indica q son elementos padre.
            If drMenuItem("MenuId").Equals(drMenuItem("PadreId")) Then
                Dim mnuMenuItem As New MenuItem
                mnuMenuItem.Value = drMenuItem("MenuId").ToString
                mnuMenuItem.Text = drMenuItem("descripcion").ToString
                mnuMenuItem.NavigateUrl = drMenuItem("Url").ToString

                'agregamos el Ítem al menú
                mnuPrincipal.Items.Add(mnuMenuItem)

                'hacemos un llamado al metodo recursivo encargado de generar el árbol del menú.
                AddMenuItem(mnuMenuItem, dtMenuItems)
            End If
        Next

    End Sub

    Public Sub cargarMenuxPerfil(ByRef mnuPrincipal As Menu, ByVal usuario As String)
        'Traemos los datos de datos.
        Dim param(0) As ADODB.Parameter
        Dim rs As ADODB.Recordset
        Dim dtMenuItems As New DataTable
        'Dim i As Integer

        param(0) = New ADODB.Parameter
        param(0).Name = "@perfilusuario"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(0).Type = ADODB.DataTypeEnum.adVarChar '<--tipo de dato 
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(0).Value = usuario   ' <--el valor que le pasamos a la base
        param(0).Size = 20 'Si el dat

        rs = Datos.TraerTodos("traerMenuOpcionesxPerfil", param, "cargarMenuOpciones")

        dtMenuItems = FG.cargaUnDataTable(rs)

        'recorremos el datatable para agregar los elementos de que estaran en la cabecera del menú.
        For Each drMenuItem As Data.DataRow In dtMenuItems.Rows

            'esta condicion indica q son elementos padre.
            If drMenuItem("MenuId").Equals(drMenuItem("PadreId")) Then
                Dim mnuMenuItem As New MenuItem
                mnuMenuItem.Value = drMenuItem("MenuId").ToString
                mnuMenuItem.Text = drMenuItem("descripcion").ToString
                mnuMenuItem.NavigateUrl = drMenuItem("Url").ToString

                'agregamos el Ítem al menú
                mnuPrincipal.Items.Add(mnuMenuItem)

                'hacemos un llamado al metodo recursivo encargado de generar el árbol del menú.
                AddMenuItem(mnuMenuItem, dtMenuItems)
            End If
        Next

    End Sub
    Private Sub AddMenuItem(ByRef mnuMenuItem As MenuItem, ByVal dtMenuItems As Data.DataTable)

        'recorremos cada elemento del datatable para poder determinar cuales son elementos hijos
        'del menuitem dado pasado como parametro ByRef.
        For Each drMenuItem As Data.DataRow In dtMenuItems.Rows
            If drMenuItem("PadreId").ToString.Equals(mnuMenuItem.Value) AndAlso _
            Not drMenuItem("MenuId").Equals(drMenuItem("PadreId")) Then
                Dim mnuNewMenuItem As New MenuItem
                mnuNewMenuItem.Value = drMenuItem("MenuId").ToString
                mnuNewMenuItem.Text = drMenuItem("descripcion").ToString
                mnuNewMenuItem.NavigateUrl = drMenuItem("Url").ToString

                'Agregamos el Nuevo MenuItem al MenuItem que viene de un nivel superior.
                mnuMenuItem.ChildItems.Add(mnuNewMenuItem)

                'llamada recursiva para ver si el nuevo menú ítem aun tiene elementos hijos.
                AddMenuItem(mnuNewMenuItem, dtMenuItems)
            End If
        Next

    End Sub

    Public Sub MuestraCartel(ByVal MsjeAmostrar As String, ByRef lblMensaje As Label)
        lblMensaje.Text = MsjeAmostrar
        lblMensaje.Visible = True
    End Sub

    Public Sub SacaCartelDeAViso(ByRef lblMensaje As Label)
        lblMensaje.Text = ""
        lblMensaje.Visible = False
    End Sub
    Public Sub MuestraCartelDeguardar(ByVal Msje As String, ByRef lblMensaje As Label)
        lblMensaje.Text = Msje
        lblMensaje.Visible = True
    End Sub
    Public Function Busca_Si_exiteUNvalorEnGridVIEW(ByRef Gv As GridView, ByVal ColmnaDondeBUscarDelGrid As Single, ByVal ValorAbuscar As String) As Boolean
        Dim I As Integer
        Dim Fila As GridViewRow

        ' funcion que busca si existe un valor en una columna de un gridview


        If Gv.Rows.Count = 0 Then
            Busca_Si_exiteUNvalorEnGridVIEW = False
            Exit Function
        End If


        If Gv.Rows.Count > 0 Then
            For I = 1 To Gv.Rows.Count
                'asigno la fila del dgrid a mi fila 
                Fila = Gv.Rows(I - 1)

                'me fijo si el valor esta en la culuman especificada ''
                If UCase(Fila.Cells(ColmnaDondeBUscarDelGrid).Text) = UCase(ValorAbuscar) Then
                    Busca_Si_exiteUNvalorEnGridVIEW = True
                    Exit Function
                End If

            Next I

        End If

        'si llego hasta aca es que el grid no tiene el valor '
        Busca_Si_exiteUNvalorEnGridVIEW = False



    End Function

    Public Function DiaProximo(ByVal fecha As String, ByVal dia As String) As String
        Dim diaNumero As Integer

        dia = LCase(dia)

        Select Case dia
            Case "domingo"
                diaNumero = 1
            Case "lunes"
                diaNumero = 2
            Case "martes"
                diaNumero = 3
            Case "miercoles"
                diaNumero = 4
            Case "jueves"
                diaNumero = 5
            Case "viernes"
                diaNumero = 6
            Case "sabado"
                diaNumero = 7
        End Select

        While Weekday(fecha) <> diaNumero

            fecha = DateAdd(DateInterval.Day, 1, CDate(fecha))

        End While

        DiaProximo = fecha


    End Function

    Public Sub LimpiarGridView(ByRef gridView As GridView)


        gridView.DataSource = Nothing
        gridView.DataBind()

    End Sub

    Public Function Genera_Dni_Provisorio() As String

        Dim Rs As ADODB.Recordset

        Rs = Datos.TraerTodos("GeneraDniProvisorio", Nothing, "alta persona- genearDniProvisorio")
        If Rs.RecordCount > 0 Then
            Rs.MoveFirst()
            Genera_Dni_Provisorio = Rs.Fields(0).Value.ToString
            Exit Function

        End If

        Genera_Dni_Provisorio = ""

    End Function
    Public Sub completaCombo_CnHOrasYMInutos_cada5Min(ByVal combo As DropDownList)

        Dim axuFecha As DateTime
        Dim auxHasta As DateTime


        axuFecha = Now.Date
        'le suumo un dia asi se donde parar 
        auxHasta = DateAdd(DateInterval.Day, 1, axuFecha)

        'vacio el combo
        combo.Items.Clear()


        While (axuFecha.Day <> auxHasta.Day)


            combo.Items.Add(Hour(axuFecha).ToString & ":" & Right("0" & (Minute(axuFecha).ToString), 2))
            'le sumo 5 minutos   al dia 
            axuFecha = DateAdd(DateInterval.Minute, 5, axuFecha)
        End While
    End Sub
    Public Function CorrigeFecha(ByVal _fecha As DateTime) As String
        Dim anio As String
        Dim mes As String
        Dim dia As String


        If _fecha = "" Then
            CorrigeFecha = ""
            Exit Function
        End If


        dia = CStr(Day(_fecha))
        If Len(dia) = 1 Then
            dia = "0" & dia
        End If


        mes = CStr(Month(_fecha))
        If Len(mes) = 1 Then
            mes = "0" & mes
        End If

        anio = CStr(Year(_fecha))


        CorrigeFecha = dia & "/" & mes & "/" & anio


    End Function

    Public Function CorrigeFechaMMddyyyy(ByVal _fecha As DateTime) As String
        Dim anio As String
        Dim mes As String
        Dim dia As String


        If _fecha = "" Then
            CorrigeFechaMMddyyyy = ""
            Exit Function
        End If


        dia = CStr(Day(_fecha))
        If Len(dia) = 1 Then
            dia = "0" & dia
        End If


        mes = CStr(Month(_fecha))
        If Len(mes) = 1 Then
            mes = "0" & mes
        End If

        anio = CStr(Year(_fecha))


        CorrigeFechaMMddyyyy = mes & "/" & dia & "/" & anio


    End Function
    Public Sub CargaControlChart_asp(ByVal _Rs As ADODB.Recordset, ByRef chart1 As Chart, ByVal TITULO As String, ByVal _tipo_Grafico As SeriesChartType, ByVal MostrarPorcentajeEntitulos As Boolean, ByVal _orientacion As AreaAlignmentOrientations, ByVal _color As Color, Optional ByVal _tamanioLETraTitulo As Single = 12, Optional ByVal TituloEjex As String = "", Optional ByVal _Ancho As Integer = 600, Optional ByVal _alto As Integer = 600, Optional ByVal Max_DeL_EjeX As Integer = 0, Optional ByVal _3d As Boolean = True, Optional ByVal _inclinacion As Integer = 40, Optional ByVal _rotacion As Integer = 0, Optional ByVal _perpectiva As Single = 0, Optional ByVal AumentarEscalaEjeY As Single = 50)
        Dim ChartArea1 As DataVisualization.Charting.ChartArea = New ChartArea()
        Dim dt As New DataTable
        Dim I As Integer
        Dim yValues() As Double
        Dim xValues() As String




        'vacio el chart
        chart1.DataBind()

        'si no hay datos salgo 
        If _Rs.RecordCount = 0 Then
            Exit Sub
        End If

        ' Llenar los datos de las series

        'Dim xValues As String() = {"Quesos", "Pastas", "Carnes", "Lácteos", "Frutas"}
        'dim yValues As Double() = {45.619999999999997, 55.130000000000003, 50.149999999999999, 43.130000000000003, 74.519999999999996}



        '------------cargo los datos-----
        _Rs.MoveFirst()
        For I = 1 To _Rs.RecordCount

            'redimensiono el vector segun sea el caso 
            If (I - 1) = 0 Then
                ReDim yValues(0)
                ReDim xValues(0)
            Else
                ReDim Preserve yValues(I - 1)
                ReDim Preserve xValues(I - 1)
            End If

            'valores numericos
            yValues(UBound(yValues)) = _Rs.Fields(1).Value

            'texto  y  (si es que viene definido en la funcion le pongo el valor del porcentaje ) 
            If MostrarPorcentajeEntitulos = True Then
                xValues(UBound(xValues)) = _Rs.Fields(0).Value.ToString & " (" & _Rs.Fields(1).Value.ToString & "%)"
            Else
                xValues(UBound(xValues)) = _Rs.Fields(0).Value.ToString
            End If
            ''''''''''''''''''''''''''''''''''''''''

            _Rs.MoveNext()
        Next I



        'Creo la Serie1
        chart1.Series.Add(getSeries("Series1"))

        'Implemento Series
        chart1.Series(0).Points.Clear()


        ' le pongo nombre 
        chart1.Series(0).XValueMember = _Rs.Fields(0).Name
        chart1.Series(0).YValueMembers = _Rs.Fields(1).Name

        ChartArea1.Name = "ChartArea1"
        ChartArea1.Name = ""

        'Seteo Titulo Encabezado Chart 
        'Seteamos el titulo
        chart1.Titles.Add(TITULO)
        chart1.Titles(0).Text = TITULO

        'aca  le pongo el stylo de la letra del titulo 
        chart1.Titles(0).Font = New Font("Times New Roman", _tamanioLETraTitulo)

        'asigno el titulo de chat
        chart1.Titles(0).Text = TITULO


        chart1.Titles(0).TextStyle = DataVisualization.Charting.TextStyle.Shadow
        chart1.Titles(0).TextOrientation = DataVisualization.Charting.TextOrientation.Horizontal
        chart1.Titles(0).Docking = DataVisualization.Charting.Docking.Top
        chart1.Titles(0).Alignment = Drawing.ContentAlignment.MiddleCenter
        chart1.ChartAreas.Add(ChartArea1)

        'seteo el largo y ancho 
        chart1.Width = _Ancho
        chart1.Height = _alto

        chart1.ChartAreas(0).AxisX.Interval = 1


        If TituloEjex <> "" Then
            chart1.ChartAreas(0).AxisY.Title = TituloEjex
        End If









        ' le doy la orientacion 
        chart1.ChartAreas(0).AlignmentOrientation = _orientacion




        'Habilitar desabiolito el 3D en el gráfico
        ' estan propiedades de grafico 3d
        With chart1.ChartAreas(0).Area3DStyle
            .Enable3D = _3d
            .Inclination = _inclinacion


            If _perpectiva <> 0 Then
                .Perspective = _perpectiva
            End If



            If _rotacion <> 0 Then
                .Rotation = 10
            End If

        End With
        '--------------------------



        'seteo el color de la barras 
        chart1.Series("Series1").Color = _color



        'Color de fondo 
        'chart1.ChartAreas(0).BackColor



        'cargo los valores
        chart1.Series("Series1").Points.DataBindXY(xValues, yValues)


        'le pongo el maxim
        'seteo el maximo que se puede mostrar en el eje 
        If Max_DeL_EjeX <> 0 Then
            chart1.ChartAreas(0).AxisY.Maximum = Max_DeL_EjeX
            'esto le un formato de coma 
            'chart1.ChartAreas(0).AxisY.LabelStyle.Format = "P0"

            'aca le asigo la escala al eje y ,,, osea se le aumente el valor 
            chart1.ChartAreas(0).AxisY.ScaleView.Size = (AumentarEscalaEjeY)   '<----se hace como un zoom     AxisX.ScaleView.Zoom(0, 20)
        End If
        '--------------------------------------


        'chart1.Series(0).IsValueShownAsLabel = True
        'chart1.Series(0).IsVisibleInLegend = True
        'chart1.Series(0)("LabelStyle") = "Bottom"
        'chart1.Series(0).Font = New Font("Times New Roman", 7)



        ' Setear el tipo de Gráfico
        chart1.Series("Series1").ChartType = _tipo_Grafico

        'Setear el Estilo de las Etiquetas
        chart1.Series("Series1")("PieLabelStyle") = "Outside"


        ' Set Doughnut radius percentage
        'Setea el radio del gráfico
        '     Chart1.Series("Default")("DoughnutRadius") = "90"

        'Resalta el item según el dropdownlist DDSeleccion
        'chart1.Series("Series1").Points(DDSeleccion.SelectedIndex)("Exploded") = "true"




        '' Desabilitar la leyenda
        'chart1.Legends(Legends(0).Enabled = False)



        ' chart1.DataBind()

    End Sub
    Public Function DevuelveUrlGoogle_chart_Barras(ByVal _RS As ADODB.Recordset, ByVal _TipoGrafico As TipoGraficoBarrasGoogle, Optional ByVal Ancho As Integer = 370, Optional ByVal Alto As Integer = 100, Optional ByVal Titulo_grafico As String = "") As String

        Dim TituloProcion As String
        Dim Valores As String
        Dim J As Integer
        Dim Str_Grafico As String
        Dim Colors As String
        Dim tomalidad As Integer

        '-------------------------------
        If _TipoGrafico = TipoGraficoBarrasGoogle.horizonal Then
            Str_Grafico = "bhs"
        Else
            Str_Grafico = "bvs"
        End If
        '------------------



        If _RS.RecordCount = 0 Then
            DevuelveUrlGoogle_chart_Barras = ""
            Exit Function
        End If

        ' lo muevo al inicio
        _RS.MoveFirst()

        'armo el titulo
        TituloProcion = ""
        For J = 1 To _RS.RecordCount
            TituloProcion = TituloProcion & _RS.Fields(0).Value.ToString & " (" & _RS.Fields(1).Value.ToString & "%)"

            If J < _RS.RecordCount Then
                TituloProcion = TituloProcion & "|"
            End If


            _RS.MoveNext()
        Next J

        '--------------


        ''si tiene mas de tres registros le pongo color
        tomalidad = 0

        'If _RS.RecordCount > 3 Then
        Colors = ""
        For J = 1 To _RS.RecordCount

            If J = 1 Then
                Colors = Colors & "0000FF"
            End If

            If J = 2 Then
                Colors = Colors & "BDB76B"
            End If

            If J = 3 Then
                Colors = Colors & "FFFF33"
            End If

            If J = 4 Then
                Colors = Colors & "FFDAB9"
            End If

            If J = 5 Then
                Colors = Colors & "B0C4DE"
            End If

            If J = 6 Then
                Colors = Colors & "006633"
            End If

            If J = 7 Then
                Colors = Colors & "FFDEAD"
            End If


            If J = 8 Then
                Colors = Colors & "C0C0C0"
            End If
            If J = 9 Then
                Colors = Colors & "A9A9A9"
            End If
            If J = 10 Then
                Colors = Colors & "696969"
            End If

            If J = 11 Then
                Colors = Colors & "6495ED"
            End If

            If J = 12 Then
                Colors = Colors & "708090"
            End If

            If J = 13 Then
                Colors = Colors & "2F4F4F"
            End If

            If J = 14 Then
                Colors = Colors & "F08080"
            End If

            If J = 15 Then
                Colors = Colors & "FA8072"
            End If

            If J = 16 Then
                Colors = Colors & "E9967A"
            End If

            If J = 17 Then
                Colors = Colors & "D8BFD8"
            End If

            If J = 18 Then
                Colors = Colors & "B22222"
            End If

            If J = 19 Then
                Colors = Colors & "800080"
            End If

            If J = 20 Then
                Colors = Colors & "483D8B"
            End If


            If J < _RS.RecordCount Then
                Colors = Colors & "|"
            End If

            'Colors = "&chco=4d89f9|c6d9fd"
            Colors = "&chco=" & Colors

        Next J




        ' End If

        ''----------------------------



        'valores 
        Valores = ""
        _RS.MoveFirst()
        For J = 1 To _RS.RecordCount

            Valores = Valores & Replace(_RS.Fields(1).Value.ToString, ",", ".")

            If J < _RS.RecordCount Then
                Valores = Valores & ","
            End If

            _RS.MoveNext()
        Next J
        '-----------------------



        'titulo de grafico
        If Titulo_grafico <> "" Then
            Titulo_grafico = "&chtt=" & Titulo_grafico
        End If




        DevuelveUrlGoogle_chart_Barras = "http://chart.apis.google.com/chart?cht=" & Str_Grafico & "&chd=t:" & Valores & Colors & "&chs=" & CStr(Ancho) & "x" & CStr(Alto)
        DevuelveUrlGoogle_chart_Barras = DevuelveUrlGoogle_chart_Barras & "&chdl=" & TituloProcion
        DevuelveUrlGoogle_chart_Barras = DevuelveUrlGoogle_chart_Barras & Titulo_grafico









    End Function

    Public Function DevuelveUrlGoogle_chart_Torta(ByVal _RS As ADODB.Recordset, ByVal _TipoGrafico As TipoGraficoTortaGoogle, Optional ByVal Ancho As Integer = 370, Optional ByVal Alto As Integer = 100, Optional ByVal Titulo_grafico As String = "", Optional ByVal _Color As Color = Nothing, Optional ByVal _Color2 As Color = Nothing, Optional ByVal _Color3 As Color = Nothing) As String

        Dim TituloProcion As String
        Dim Valores As String
        Dim ValoresPARAMOSTRARenGRafico As String
        Dim J As Integer
        Dim Str_Grafico As String
        Dim Colors As String
        Dim tomalidad As Integer

        '-------------------------------
        If _TipoGrafico = TipoGraficoTortaGoogle.DosDimensiones Then
            Str_Grafico = "p"
        Else
            Str_Grafico = "p3"
        End If
        '------------------



        If _RS.RecordCount = 0 Then
            DevuelveUrlGoogle_chart_Torta = ""
            Exit Function
        End If

        ' lo muevo al inicio
        _RS.MoveFirst()

        'armo el titulo
        TituloProcion = ""
        For J = 1 To _RS.RecordCount
            ' TituloProcion = TituloProcion & _RS.Fields(0).Value.ToString & "%20" & " (" & _RS.Fields(1).Value.ToString & "%)"
            TituloProcion = TituloProcion & _RS.Fields(0).Value.ToString & " (" & _RS.Fields(1).Value.ToString & "%)"
            If J < _RS.RecordCount Then
                TituloProcion = TituloProcion & "|"
            End If


            _RS.MoveNext()
        Next J

        '--------------

        ' dejo que se elija el color 
        Colors = ""
        If _Color <> Nothing Then
            Colors = "&chco=" & Right(Hex(_Color.ToArgb), 6)



            If _Color2 <> Nothing Then
                Colors = Colors & "|" & Right(Hex(_Color2.ToArgb), 6)
            End If
            ''''''''''''''''''''''''''''''''''

            If _Color3 <> Nothing Then
                Colors = Colors & "|" & Right(Hex(_Color3.ToArgb), 6)
            End If
            ''''''''''''''''''''''''''''''''''

        End If
        '----------------------------------------------------

        'si tiene mas de tres registros le pongo color
        tomalidad = 0
        If _RS.RecordCount > 3 Then
            Colors = ""

            For J = 1 To _RS.RecordCount

                If J = 1 Then
                    Colors = Colors & "0000FF"
                End If

                If J = 2 Then
                    Colors = Colors & "BDB76B"
                End If

                If J = 3 Then
                    Colors = Colors & "00BFFF"
                End If

                If J = 4 Then
                    Colors = Colors & "FFDAB9"
                End If

                If J = 5 Then
                    Colors = Colors & "B0C4DE"
                End If

                If J = 6 Then
                    Colors = Colors & "708090"
                End If

                If J = 7 Then
                    Colors = Colors & "FFDEAD"
                End If


                If J = 8 Then
                    Colors = Colors & "C0C0C0"
                End If
                If J = 9 Then
                    Colors = Colors & "A9A9A9"
                End If
                If J = 10 Then
                    Colors = Colors & "696969"
                End If

                If J = 11 Then
                    Colors = Colors & "6495ED"
                End If

                If J = 12 Then
                    Colors = Colors & "708090"
                End If

                If J = 13 Then
                    Colors = Colors & "2F4F4F"
                End If

                If J = 14 Then
                    Colors = Colors & "F08080"
                End If

                If J = 15 Then
                    Colors = Colors & "FA8072"
                End If

                If J = 16 Then
                    Colors = Colors & "E9967A"
                End If

                If J = 17 Then
                    Colors = Colors & "D8BFD8"
                End If

                If J = 18 Then
                    Colors = Colors & "B22222"
                End If

                If J = 19 Then
                    Colors = Colors & "800080"
                End If

                If J = 20 Then
                    Colors = Colors & "483D8B"
                End If


                If J < _RS.RecordCount Then
                    Colors = Colors & "|"
                End If

                'tonos de colores 
                tomalidad = tomalidad + 333

            Next J


            Colors = "&chco=" & Colors

        End If

        '----------------------------



        'valores 
        Valores = ""
        _RS.MoveFirst()
        For J = 1 To _RS.RecordCount

            Valores = Valores & Replace(_RS.Fields(1).Value.ToString, ",", ".")

            If J < _RS.RecordCount Then
                Valores = Valores & ","
            End If

            _RS.MoveNext()
        Next J
        '-----------------------


        'valores para mostrar en el grafico DENTRO de la torta (no son los que van al costado)
        ValoresPARAMOSTRARenGRafico = Replace(Valores, ",", "%|")
        '    esta linea es para ponerle el porcentaje AL ultimo valor 
        ValoresPARAMOSTRARenGRafico = ValoresPARAMOSTRARenGRafico & "%"

        ValoresPARAMOSTRARenGRafico = "&chl=" & ValoresPARAMOSTRARenGRafico
        '---------------------------



        'titulo de grafico
        If Titulo_grafico <> "" Then
            Titulo_grafico = "&chtt=" & Titulo_grafico
        End If



        DevuelveUrlGoogle_chart_Torta = "http://chart.apis.google.com/chart?cht=" & Str_Grafico & "&chd=t:" & Valores & Colors & "&chs=" & CStr(Ancho) & "x" & CStr(Alto)
        DevuelveUrlGoogle_chart_Torta = DevuelveUrlGoogle_chart_Torta & ValoresPARAMOSTRARenGRafico & "&chdl=" & TituloProcion
        DevuelveUrlGoogle_chart_Torta = DevuelveUrlGoogle_chart_Torta & Titulo_grafico









    End Function


    Public Function EnviarMail(Optional ByVal destinatario As String = "yfrangaston@gmail.com", Optional ByVal Asunto As String = "", Optional ByVal mensaje As String = "") As String

        'Creamos las variables para los parametros del mensaje de correo a enviar
        Dim SMTP As String = "smtp.gmail.com"
        Dim Usuario As String = "info@schc-ar.com.ar"
        Dim Password As String = "123maruba"

        mensaje = "<table width=" + """" + "100%" + """" + ">" + _
                      "<tr>" + _
                      "    <td align=" + """" + "center" + """" + "style=" + """" + "background-color : #01A9DB;" + """" + " > " + _
                      "        <h1 style=" + """" + "font-style:; color: #FFFFFF;" + """" + ">Centralizador de Historial Clinico </h1>" + _
                      "    </td>" + _
                      "</tr>" + _
                  "</table>" + _
     "<hr />" + _
     "<br/> " + mensaje

        '----este pedacito fue lo que agregue 
        If destinatario = "" Then
            EnviarMail = "No hay mail registrado para notitificar el proceso"
            Exit Function
        End If
        '------------------------------------
        Try

            Dim Puerto As Integer = 25 'Depende del puerto de salida de su servidor SMTP

            'Se crea el mensaje
            Dim correo As New System.Net.Mail.MailMessage()
            correo.From = New System.Net.Mail.MailAddress(Usuario)
            correo.IsBodyHtml = True
            correo.To.Add(destinatario)
            correo.Subject = Asunto
            correo.Body = mensaje

            'Configuramos el servidor smtp antes de enviar, pasandole las variables que ya tenemos

            Dim Servidor As New System.Net.Mail.SmtpClient
            Servidor.Host = SMTP
            Servidor.Port = Puerto
            Servidor.EnableSsl = True 'Depende si su servidor usa SSL
            Servidor.UseDefaultCredentials = False
            Servidor.Credentials = New System.Net.NetworkCredential(Usuario, Password)
            'Enviamos el mail dentro de un try, para atrapar un posible error

            Servidor.Send(correo)
            EnviarMail = "Correo enviado Satisfactoriamente"
        Catch ex As Exception
            EnviarMail = "Error al enviar mail: " + ex.Message
        End Try

    End Function



    Public Function borrarTurnos(ByVal idTurno As Integer) As Boolean
        Dim i As Integer = 1 'Numero de campos
        Dim param(i - 1) As ADODB.Parameter

        Dim Resultado As Boolean

        'idTurno
        param(0) = New ADODB.Parameter
        param(0).Name = "@idTurno"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(0).Type = ADODB.DataTypeEnum.adInteger '<--tipo de dato 
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(0).Value = idTurno  ' <--el valor que le pasamos a la base
        param(0).Size = 50 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,

        Resultado = Datos.Modificar("BorrarTurno", param, "Ventanilla.aspx, gvTurnos_RowUpdated")

        If Resultado = True Then
            MsgBox("Modifico exitoso", MsgBoxStyle.Information, "aviso")
        Else
            MsgBox("Fallo", MsgBoxStyle.Critical, "error")
        End If
        borrarTurnos = Resultado

    End Function
End Module